package msc.dodo.wtb.api;

import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;

/**
 * 枚举ApiInfoList：配置API相关信息
 *   port：不同api的路由路径
 *   httpMethod：http发送方式（post/get/put...）
 *   needCheckRole：是否需要检核权限（目前保留字段）
 *   mediaType：传输数据类型
 */
public enum ApiInfoList {
    /* 机器人API */
    /**
     * 获取机器人信息
     */
    GetBotInfo("/api/v1/bot/info", HttpMethod.POST,false,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 机器人退群
     */
    SetBotIslandLeave("/api/v1/bot/island/leave",HttpMethod.POST,false,MediaType.APPLICATION_JSON_VALUE),

    /* 群API */
    /**
     * 获取群列表
     */
    GetIslandList("/api/v1/island/list",HttpMethod.POST,false,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 获取群信息
     */
    GetIslandInfo("/api/v1/island/info",HttpMethod.POST,false,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 获取群等级排行榜
     * 只对开通了群等级的群有效
     */
    GetIslandLevelRankList("/api/v1/island/level/rank/list",HttpMethod.POST,false,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 获取群禁言名单
     */
    GetIslandMuteList("/api/v1/island/mute/list",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 获取群封禁名单
     */
    GetIslandBanList("/api/v1/island/ban/list",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),

    /* 频道API */
    /**
     * 获取频道列表
     */
    GetChannelList("/api/v1/channel/list",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 获取频道信息
     */
    GetChannelInfo("/api/v1/channel/info",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),

    /* 文字频道API */
    /**
     * 发送消息
     * 按频道限制，60次/30秒，该群已被限制发言频率处罚时，1分钟内仅可发送1条消息
     */
    SetChannelMessageSend("/api/v1/channel/message/send",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 编辑消息
     * 按频道限制，1次/秒，该群已被限制发言频率处罚时，1分钟内仅可编辑1条消息
     */
    SetChannelMessageEdit("/api/v1/channel/message/edit",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 撤回消息
     */
    SetChannelMessageWithdraw("/api/v1/channel/message/withdraw",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 添加表情反应
     * 在指定频道消息上添加反应表情，只能添加机器人自身的，按频道限制，60次/30秒
     */
    SetChannelMessageReactionAdd("/api/v1/channel/message/reaction/add",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 取消表情反应
     * 移除指定频道消息上的反应表情，可移除其他成员的、机器人自身的，按频道限制，60次/30秒
     */
    SetChannelMessageReactionRemove("/api/v1/channel/message/reaction/remove",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),

    /* 身份组API */
    /**
     * 获取身份组列表
     */
    GetRoleList("/api/v1/role/list",HttpMethod.POST,false,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 赋予成员身份组
     */
    SetRoleMemberAdd("/api/v1/role/member/add",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 取消成员身份组
     */
    SetRoleMemberRemove("/api/v1/role/member/remove",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),

    /* 成员API */
    /**
     * 获取成员列表
     */
    GetMemberList("/api/v1/member/list",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 获取成员信息
     */
    GetMemberInfo("/api/v1/member/info",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 获取成员身份组列表
     */
    GetMemberRoleList("/api/v1/member/role/list",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 获取成员邀请信息
     * 只对开通了邀请系统的群有效
     */
    GetMemberInvitationInfo("/api/v1/member/invitation/info",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 编辑成员群昵称
     */
    SetMemberNickNameEdit("/api/v1/member/nick/set",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 禁言成员
     */
    SetMemberMuteAdd("/api/v1/member/ban/set",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 取消成员禁言
     */
    SetMemberMuteRemove("/api/v1/member/mute/remove",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 永久封禁成员
     * 按群限制，1次/10秒
     */
    SetMemberBanAdd("/api/v1/member/ban/add",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),
    /**
     * 取消成员永久封禁
     */
    SetMemberBanRemove("/api/v1/member/ban/remove",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),

    /* 数字藏品API */
    /**
     * 获取成员数字藏品判断
     * 只对绑定了高能链钱包且开启了数字藏品展示的成员有效
     */
    GetMemberNftStatus("/api/v1/member/nft/status",HttpMethod.POST,true,MediaType.APPLICATION_JSON_VALUE),

    /* 私信API */
    /**
     * 发送私信
     * 按私聊对象限制，10次/30秒；按机器人限制，1W次/天
     */
    SetPersonalMessageSend("/api/v1/personal/message/send",HttpMethod.POST,false,MediaType.APPLICATION_JSON_VALUE),

    /* 资源API */
    /**
     * 上传资源图片
     * 按图片格式限制，支持JPG、JPEG、GIF、PNG、WEBP；按图片大小限制，20MB/张；按图片张数限制，1000张/天
     */
    SetResourcePictureUpload("/api/v1/resource/picture/upload",HttpMethod.POST,false,MediaType.MULTIPART_FORM_DATA_VALUE),
    ;

    /**
     * 不同api的路由路径
     */
    private String port;
    /**
     * http发送方式（post/get/put...）
     */
    private HttpMethod httpMethod;
    /**
     * 是否需要检核权限（目前保留字段）
     */
    private boolean needCheckRole;
    /**
     * 传输数据类型
     */
    private String mediaType;
    ApiInfoList(String port, HttpMethod httpMethod, boolean needCheckRole, String mediaType) {
        this.httpMethod=httpMethod;
        this.port=port;
        this.needCheckRole=needCheckRole;
        this.mediaType=mediaType;
    }

    public String getPort(){
        return this.port;
    }

    public HttpMethod getHttpMethod(){
        return this.httpMethod;
    }

    public HttpMethod getNeedCheckRole(){
        return this.httpMethod;
    }

    public String getMediaType(){
        return this.mediaType;
    }
}
